我們用simple product的型態來當範例,那我們基本上先做一個價格的調整,那我們先來做一個簡單的範例,就是先取得如何變化價格,而我們可以使用woocommerce_get_regular_price
與woocommerce_product_get_price
來取得靜態的價格變化,那比如說我們可以設定成,我們的價格在特定商品之下,先是兩倍價錢來,那我們使用了兩個來處理,並且可以處理價錢,比如說目前成本因素太高,價格得要增加一些,那我們就可以靜態寫一些。
add_filter('woocommerce_get_regular_price','my_custom_price', 99);
add_filter('woocommerce_product_get_price', 'my_custom_price', 99);
function my_custom_price( $original_price , $product ) {
$id = $product->get_id();
if($id == 3677) return $original_price + 32;
return $original_price;
}
現在的外掛,可以處理很多role的操作,我們就不細談如何生成新的role,而我們可以設定一個role的名稱叫做VVIP,而他將可以受到特別的優惠,尊榮的價錢有錢就都可以享受得到,而其他人則是無福消受。
add_filter('woocommerce_get_regular_price','my_custom_price', 99);
add_filter('woocommerce_product_get_price', 'my_custom_price', 99);
function my_custom_price( $original_price , $product ) {
if(true === permission_valid('VVIP')) return (int)($original_price * 0.9);
$id = $product->get_id();
if($id == 3677) return $original_price + 32;
return $original_price;
}
function permission_valid($target_role){
$user = wp_get_current_user();
$roles = ( $user instanceof WP_User )? $user->roles: [‘visitor’];
if( in_array($roles,$target_role) ) return true;
return false;
}
我們現在要加入刻字的服務,而我們會在有設定的產品加入這項功能,那現在我們要加入meta來判斷他是否有使用我們的顯示,那這一個版本我們選用了woocommerce_before_add_to_cart_form
來增加,不過今天還沒有時間能做到寫js去寫個helper來做engrave增加的價錢,我們預計明天再把它全部完成。
add_action('init','go_ranger_wc_init');
function go_ranger_wc_init(){
$product = wc_get_product( 3991 );
if(false === $product->meta_exists('go_ranger_enrave')) {
$product->add_meta_data('go_ranger_enrave',true);
$product->save_meta_data();
}
}
add_action('woocommerce_before_add_to_cart_form','go_ranger_variation');
function go_ranger_variation(){
global $product;
$show_content = $product->get_meta('go_ranger_enrave');
if($show_content){
?>
<div class="go-ranger-flex" style="display:flex;justify-content:space-around;align-items:center;">
<span>刻字在這,加些錢錢</span>
<input type="text" data-engrave="pine">
</div>
<?php
}
我們加入初始化的加入meta,而更好的操作,我會選擇在post->product的內頁,對於每個產品的做選擇,而我們最終的目的,在如果有填寫雷射字體的文字上,會照著字數的多寡,有比例的增加,像是限制10個字,那麼1-5個字加上50,那6-10加上100,而這一個刻字的服務,在vvip的服務之中,是沒有做到折扣的,讓這個外掛與大眾使用的折扣外掛不同,更能貼切的活用,而不是一股腦的就是一定九折八折。
然後遇到些許的問題是,在製作動態的價格的時候找不到對應的hook可以掛上去,如果依舊找不到只能做一個post每次更動就改變當下的價格的helper了,希望不要這樣,這樣可能又要拖好幾天了QQ補充上面沒有提到的woocommerce_product_get_price
是要解決快取的問題,不然只有更動一個價格,如果有快取是會有不變的;而我們的新增的欄位不一定可以只有刻字,所以我們再增加欄位的部分,也可以製作一個新增欄位,如果是對於視覺器設計開發擅長的人,將這個使用的體驗提升就是靠這類的大老來貢獻了。
最後,外掛的內容會被整理成class,並且加上偵測是否有woocommerce這個基本的防呆,如果沒有就不用載入,因為根本不會運作,而我們最後在購物車上,要顯示著我們的meta key顯示,那計算價錢的部分,我會參考這一篇問題的邏輯來解決,希望在使用woocommerce_before_calculate_totals
與$woocommerce
的重新算價錢可以有好的開發時光。
WooCommerce Visual Hook Guide: Single Product Page
Caching and dynamic pricing – upcoming changes to the get_variation_prices method